The R code you may find on the web can be a little hard to read. Below is a sample that displays a grid of covariates.
# Pairs plots with smoothScatter, Pearson’s and histograms
v1=0:100
v2=200:300
v3=100:200
v4=100:200
z=cbind(v1, v2, v3, v4) ## variables to assess
panel.pearson <- function(x, y, ...) { ## upper panel display for Pearson’s
horizontal <- (par("usr")[1] + par("usr")[2]) / 2;
vertical <- (par("usr")[3] + par("usr")[4]) / 2;
text(horizontal, vertical, format(abs(cor(x,y)), digits=2, cex=2))
}
pairs(z, cex.axis=1.3, cex.labels=3, lower.panel=function(...){par(new=TRUE);smoothScatter(..., nrpoints=0)},
diag.panel=function(...){par(new=TRUE);hist(..., main="", breaks=50, col="orange", nrpoints=0)},
upper.panel=panel.pearson) ### create histogram in the diagonal panel and density scatter in the lower panel
The line with "panel.pearson" creates a function that organizes the data into a grid using "horizontal" and "vertical".
The really challenging part to read is the line with the "pairs()" function. Notice that the writer has created a number of functions that are created in the parameter list and then passed into "pairs". I do not recommend this approach. The other problem is that we have to put this code in anywhere we want to use this chart.
In the code below, I've created a function that takes a series of variables which can then be called in a much simpler way than the code above. The complexity is hidden in the function. This code can then be saved in a file and used in any script we need it in.
##############################################################################
# Utility functions to diplay
# Pairs plots with smoothScatter, Pearson's and histograms
##############################################################################
##############################################################################
# Function to display the pearsons values in the upper-right panels
# For additional information on the graphic parameters:
# https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/par.html
##############################################################################
PearsonPanel <- function(x, y, ...)
{
horizontal <- (par("usr")[1] + par("usr")[2]) / 2;
vertical <- (par("usr")[3] + par("usr")[4]) / 2;
CorrelationMatrix=cor(x,y) # Create the correlation matrix between x and y
# Format the text (cex=scale factor for font size, digits=sig digits)
FormattedMatrix=format(abs(CorrelationMatrix), digits=2, cex=5)
# Function to put the correlation values into the panels
text(horizontal, vertical, FormattedMatrix)
}
##############################################################################
# Function to display the smoothed scatttergrams in the lower-left panels
##############################################################################
LowerPanel=function(...)
{
par(new=TRUE); # sets the graphic parameter "new" to true (keeps the drawing frame from being erased)
smoothScatter(...) # parameters passed are sent as "..."
}
##############################################################################
# This is the dialogal plots with histograms
##############################################################################
DiagonalPanel=function(...)
{
par(new=TRUE);
hist(..., main="", breaks=50, col="orange")
}
##############################################################################
# This is the main function to call to display the scatter plots
##############################################################################
NiceScatterPlot=function(z)
{
# Create a matrix of scatter plots
DiagonalLabelFontSize=3
AxisFontSize=1.3
pairs(z, #data frame with value
cex.axis=AxisFontSize, cex.labels=DiagonalLabelFontSize,
lower.panel=LowerPanel,
diag.panel=DiagonalPanel,
upper.panel=PearsonPanel) ### create histogram in the diagonal panel and density scatter in the lower panel
}
Now, we can include the code above from a script that is saved separately and call the function very easily:
#############################################################################
# Main script to show two approaches to writing R code.
#############################################################################
# Including the utilities folder with "NiceScatterPlot()"
source("D:\\ProjectsR\\Utilities\\ScatterPlots.R")
# vectors to test. Try different values here.
v1=0:100
v2=200:300
v3=100:200
v4=100:200
# Vectors converted into a table
z=cbind(v1, v2, v3, v4) # variables to assess
#############################################################################
# This is the original code that while it works, is a little difficult for
# me to understand and modify.
#############################################################################
panel.pearson <- function(x, y, ...) { ## upper panel display for Pearson’s
horizontal <- (par("usr")[1] + par("usr")[2]) / 2;
vertical <- (par("usr")[3] + par("usr")[4]) / 2;
text(horizontal, vertical, format(abs(cor(x,y)), digits=2, cex=2))
}
pairs(z, cex.axis=1.3, cex.labels=3, lower.panel=function(...){par(new=TRUE);smoothScatter(..., nrpoints=0)},
diag.panel=function(...){par(new=TRUE);hist(..., main="", breaks=50, col="orange", nrpoints=0)}, upper.panel=panel.pearson) ### create histogram in the diagonal panel and density scatter in the lower panel
#############################################################################
# This is a new function that is better structured and will be easier to
# document and understand and thus easier to support. See "ScatterPlots.R"
# for more information.
#############################################################################
NiceScatterPlot(z)
Please strive to make your R code readable so others can use it and to encourage everyone to write readable code!
© Copyright 2018 HSU - All rights reserved.